﻿using System.Collections.Generic;
using Vra.Entities;

namespace Vra.DataAccess
{
	/// <summary>
	/// Базовый интерфейс для основных операций CRUD  (Create, Read, Update, Delete)
	/// </summary>
	/// <typeparam name="T">Тип объекта данных</typeparam>
	public interface IBaseEntityDao<T> : IBaseDao
		where T : BaseEntity
	{
		/// <summary>
		/// Получить список объектов из базы.
		/// Нет пейджинга и фильтра.
		/// </summary>
		/// <returns>список объектов <seealso cref="T"/></returns>
		IList<T> Load();

		/// <summary>
		/// Добавляет новый объект в базу
		/// </summary>
		/// <param name="item">объект, который следует добавить</param>
		void Add(T item);

		/// <summary>
		/// Обновляет объект в базе
		/// </summary>
		/// <param name="item">объект, который следует обновить</param>
		void Update(T item);

		/// <summary>
		/// Удаляет объект из базы
		/// </summary>
		/// <param name="id">id объекта, который следует удалить</param>
		void Delete(int id);
	}
}
